package br.com.ericogr.hanoi.iu;

import java.util.List;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import br.com.ericogr.hanoi.controle.Controlador;
import br.com.ericogr.hanoi.controle.ControladorMovePrato;
import br.com.ericogr.hanoi.controle.EventoControle;
import br.com.ericogr.hanoi.controle.EventoControle.Touch;
import br.com.ericogr.hanoi.entidade.Entidade;

public class HanoiView extends SurfaceView implements Callback {
    private Controlador controladorDoJogo;
    private List<Entidade> mEntidades;

    public HanoiView(Context context, AttributeSet attrs) {
        super(context, attrs);
        
        inicializaTarefaPintura();
    }
    
    @Override
    public void surfaceCreated (SurfaceHolder holder) {
    }
    
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        iniciarJogo(holder, width, height);
    }

    private void iniciarJogo(SurfaceHolder holder, int width, int height) {
        controladorDoJogo = new ControladorMovePrato(getHolder(), mEntidades);
        controladorDoJogo.iniciar(width, height);
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        controladorDoJogo.parar();
        controladorDoJogo = null;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent motionEvent) {
        Touch touch;
        
        switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touch = Touch.PRESSIONADO;
            break;
        case MotionEvent.ACTION_MOVE:
            touch = Touch.MOVENDO;
            break;
        case MotionEvent.ACTION_UP:
            touch = Touch.SOLTO;
            break;
        default:
            touch = null;
        }
        
        controladorDoJogo.evento(new EventoControle(motionEvent.getX(), motionEvent.getY(), touch));
        
        return true;
    }
    
    public void setEntidades(List<Entidade> entidades) {
        mEntidades = entidades;
    }
    
    public List<Entidade> getEntidades() {
        return mEntidades;
    }
    
    private void inicializaTarefaPintura() {
        getHolder().addCallback(this);
        setFocusable(true);
    }
    
}